有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Java Spark:如何在数据集上进行flatMap,并为后续的groupBy提供新的模式?

我有以下代码:

public static void main(String[] args) {
  Dataset<Row> myDataset = spark.read().parquet(PATH);

  Dataset<Row> groupedDataset = myDataset
      .flatMap((FlatMapFunction<Row, Row>) (row) -> flatMapFunc(row), Encoders.bean(Row.class))
      .groupBy("group_id")
      .max("max_col");
}  

private static Iterator<Row> flatMapFunc(Row row) {
  WrappedArray<Row> rowWrappedArray = (WrappedArray<Row>) row.get(16);
  return JavaConverters.asJavaIterator(rowWrappedArray.iterator());
}

它在第一个groupBy子句中崩溃。原因是在flatMap之后,Dataset会丢失其列名(在flatMap之后调用columns()会返回一个空的Array),因此无法对列名进行分组。此外,max()调用也不起作用,因为"max_col"也是一个不存在的列名

如何为Dataset中已经有数据但没有列名的Dataset提供列名(基本上为已经存在的Dataset提供架构)?也会接受任何其他解决方案,实现我想要的,能够在某一列上分组,并在另一列上找到最大值


共 (0) 个答案